// import Mock from 'mockjs';
// import pinyin from 'pinyin';
// import Papa from 'papaparse' 


// let fixedList = [
//     { id: 1,  name: '李明', cellphone: '13800138001', gender: '男', birthday: '1990-03-15', email: 'liming@example.com', address: '北京市朝阳区朝阳门外大街1号', groups: ['家人','朋友'] },
//     { id: 2,  name: '王芳', cellphone: '13900239002', gender: '女', birthday: '1992-07-22', email: 'wangfang@example.com', address: '上海市浦东新区陆家嘴环路100号', groups: ['朋友'] },
//     { id: 3,  name: '张伟', cellphone: '13600336003', gender: '男', birthday: '1985-11-05', email: 'zhangwei@example.com', address: '广州市天河区天河路200号', groups: ['同事'] },
//     { id: 4,  name: '赵敏', cellphone: '13700447004', gender: '女', birthday: '1995-04-18', email: 'zhaomin@example.com', address: '深圳市福田区深南大道300号', groups: ['朋友'] },
//     { id: 5,  name: '陈强', cellphone: '13500555005', gender: '男', birthday: '1988-09-30', email: 'chenqiang@example.com', address: '杭州市西湖区文三路400号', groups: ['家人'] },
//     { id: 6,  name: '周雪', cellphone: '13100661006', gender: '女', birthday: '1993-02-14', email: 'zhouxue@example.com', address: '南京市鼓楼区中山北路500号', groups: ['朋友'] },
//     { id: 7,  name: '徐磊', cellphone: '13200772007', gender: '男', birthday: '1991-06-09', email: 'xulei@example.com', address: '成都市锦江区春熙路600号', groups: ['同事'] },
//     { id: 8,  name: '孙悦', cellphone: '13300883008', gender: '女', birthday: '1994-12-25', email: 'sunyue@example.com', address: '武汉市江汉区解放大道700号', groups: ['朋友'] },
//     { id: 9,  name: '马超', cellphone: '13400994009', gender: '男', birthday: '1987-08-17', email: 'machao@example.com', address: '重庆市渝中区人民路800号', groups: ['家人'] },
//     { id: 10, name: '黄娟', cellphone: '13501005010', gender: '女', birthday: '1996-05-03', email: 'huangjuan@example.com', address: '西安市雁塔区高新路900号', groups: ['朋友'] },
//     { id: 11, name: '刘洋', cellphone: '13601116011', gender: '男', birthday: '1989-10-19', email: 'liuyang@example.com', address: '长沙市岳麓区麓山南路1000号', groups: ['同事'] },
//     { id: 12, name: '吴婷', cellphone: '13701227012', gender: '女', birthday: '1997-01-28', email: 'wuting@example.com', address: '天津市和平区南京路1100号', groups: ['朋友'] },
//     { id: 13, name: '郭勇', cellphone: '13801338013', gender: '男', birthday: '1986-04-12', email: 'guoyong@example.com', address: '苏州市工业园区金鸡湖大道1200号', groups: ['家人'] },
//     { id: 14, name: '何琳', cellphone: '13901449014', gender: '女', birthday: '1998-07-07', email: 'helin@example.com', address: '青岛市市南区香港中路1300号', groups: ['朋友'] },
//     { id: 15, name: '高飞', cellphone: '15001555015', gender: '男', birthday: '1999-09-09', email: 'gaofei@example.com', address: '大连市中市区人民路1400号', groups: ['同事'] },
//     { id: 16, name: '林静', cellphone: '15101661016', gender: '女', birthday: '2000-03-08', email: 'linjing@example.com', address: '厦门市思明区湖滨南路1500号', groups: ['朋友'] },
//     { id: 17, name: '罗浩', cellphone: '15201772017', gender: '男', birthday: '1984-12-12', email: 'luohao@example.com', address: '宁波市鄞州区钱湖北路1600号', groups: ['同事'] },
//     { id: 18, name: '梁雨', cellphone: '15301883018', gender: '女', birthday: '1993-06-24', email: 'liangyu@example.com', address: '佛山市南海区桂澜路1700号', groups: ['朋友'] },
//     { id: 19, name: '宋杰', cellphone: '15401994019', gender: '男', birthday: '1982-11-11', email: 'songjie@example.com', address: '东莞市南城区鸿福路1800号', groups: ['同事'] },
//     { id: 20, name: '郑娜', cellphone: '15502005020', gender: '女', birthday: '1995-08-08', email: 'zhengna@example.com', address: '无锡市滨湖区太湖大道1900号', groups: ['朋友'] }
//   ];
//   fixedList = fixedList.map(item => {
//     return {
//       ...item,
//       // 生成全拼（例：李明 -> li ming）
//       _pinyin_full: pinyin(item.name, { 
//         style: pinyin.STYLE_NORMAL,
//         segment: true 
//       }).join(' ').toLowerCase(),
      
//       // 生成首字母（例：李明 -> lm）
//       _pinyin_init: pinyin(item.name, {
//         style: pinyin.STYLE_FIRST_LETTER,
//         segment: true 
//       }).flat().join('').toLowerCase()
//     }
//   })
//   // 查询接口
//   Mock.mock(/\/contacts/, 'get', (options) => {
//     // 参数解析
   
//     const params = new URLSearchParams(options.url.split('?')[1])
//     const pageNo = parseInt(params.get('pageNo')) || 1
//     const pageSize = parseInt(params.get('pageSize')) || 10
//     const group = params.get('group')
//     const keyword = params.get('keyword')
  
//     // ---------- 数据过滤逻辑 ----------
//     let filtered = fixedList
  
//     // 1. 优先分组筛选
//     if (group) {
//       filtered = filtered.filter(item => item.groups.includes(group))
//     }
  
//     // 2. 关键词筛选（支持中文/拼音/手机号）
//     if (keyword) {
//       const lowerKeyword = keyword.toLowerCase()
//       filtered = filtered.filter(item => {
//         return [
//           item.name,
//           item.cellphone,
//           item._pinyin_full?.toLowerCase() || '',
//           item._pinyin_init?.toLowerCase() || ''
//         ].some(field => field.includes(lowerKeyword))
//       })
//     }
  
  
//     // ---------- 分页处理 ----------
//     const start = (pageNo - 1) * pageSize
//     return {
//       code: 200,
//       data: {
//         list: filtered.slice(start, start + pageSize),
//         totalCount: filtered.length
//       },
//       message: '查询成功'
//     }
//   })

// // 新建联系人接口
// Mock.mock(/\/user\/add/, 'post', (options) => {
//   const newData = JSON.parse(options.body)
  
//   // 校验手机号唯一性
//   if (fixedList.some(item => item.cellphone === newData.cellphone)) {
//     return { code: 409, message: '手机号已存在' }
//   }

//   // 处理分组数据格式
//   const groups = Array.isArray(newData.groups) 
//     ? newData.groups 
//     : (newData.groups ? [newData.groups] : [])

//   // 生成新ID（处理空列表情况）
//   const newId = fixedList.length > 0 
//     ? Math.max(...fixedList.map(i => i.id)) + 1 
//     : 1

//   // 添加数据并清除拼音缓存
//   const newContact = { 
//     ...newData, 
//     id: newId,
//     groups,
//     // 自动生成拼音缓存
//     _pinyin_full: pinyin(newData.name, { style: pinyin.STYLE_NORMAL }).flat().join(''),
//     _pinyin_init: pinyin(newData.name, { style: pinyin.STYLE_FIRST_LETTER }).flat().join('')
//   }
  
//   fixedList.unshift(newContact)

//   return { 
//     code: 200, 
//     data: newId,
//     message: '添加成功'
//   }
// })


// // 删除联系人接口
// Mock.mock(/\/user\/delete/, 'post', (options) => {
//   const data = JSON.parse(options.body)
//   const index = fixedList.findIndex(item => item.id === data)
  
//   if (index === -1) {
//     return { code: 404, message: '联系人不存在' }
//   }

//   // 记录被删联系人的分组信息
//   const deletedGroups = fixedList[index].groups

//   // 执行删除
//   const [deletedItem] = fixedList.splice(index, 1)

//   // 更新手动分组的计数
//   manualGroups.forEach(group => {
//     if (deletedGroups.includes(group.name)) {
//       group.count = Math.max(0, group.count - 1)
//     }
//   })

//   return { 
//     code: 200, 
//     data: deletedItem, 
//     message: '删除成功' 
//   }
// })


// // 更新联系人接口
// Mock.mock(/\/user\/update/, 'post', (options) => {
//     const updatedData = JSON.parse(options.body); // 获取更新参数
    
//     // 查找需要更新的联系人
//     const index = fixedList.findIndex(item  => item.id === updatedData.id);
    
//     if (index === -1) {
//       return { code: 404, message: '联系人不存在' };
//     }
  
//     // 合并更新数据（保留未修改的字段）
//     fixedList[index] = { 
//       ...fixedList[index], 
//       ...updatedData 
//     };
  
//     return { 
//       code: 200, 
//       data: fixedList[index], 
//       message: '更新成功' 
//     };
//   });

// // 模拟注册接口
// Mock.mock('/user/register', 'post', (options) => {
//     const data = JSON.parse(options.body);
//     // 简单验证，假设注册成功
//     return {
//         data: 20000
//     };
// });

// // 模拟登录接口
// Mock.mock('/user/login', 'post', (options) => {
//     const data = JSON.parse(options.body);
//     // 简单验证，假设登录成功
//     return {
//         data: {
//             token: Mock.Random.string('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', 32),
//             user: {
//                 name: Mock.Random.cname(),
//                 cellphone: data.cellphone
//             }
//         }
//     };
// });


// let manualGroups = []; // 手动创建的分组（独立存储）
// let dynamicGroups = []; // 动态生成的分组（来自联系人统计）

//   // 模拟获取群组接口
//   Mock.mock('/group/get', 'get', () => {
//     // 1. 动态分组统计（合并到最终列表时自动去重）
//     const dynamicMap = fixedList.reduce((acc, contact) => {
//       contact.groups.forEach(g => acc.set(g, (acc.get(g) || 0) + 1))
//       return acc
//     }, new Map())
  
//     // 2. 合并分组（手动分组覆盖动态分组）
//     const merged = [
//       // 动态分组（按名称排序且未被手动分组覆盖）
//       ...[...dynamicMap.keys()]
//         .filter(name => !manualGroups.some(m => m.name === name))
//         .map(name => ({ id: name, name, count: dynamicMap.get(name) })),
//       // 手动分组（按添加顺序尾插）
//       ...manualGroups
//     ]
  
//     return {
//       code: 200,
//       data: [
//         { id: 0, name: "全部", count: fixedList.length },
//         ...merged
//       ]
//     }
//   })
// // 新建群组接口
// Mock.mock('/group/add', 'post', (options) => {
//   const { name } = JSON.parse(options.body);

//   // 1. 校验分组唯一性（动态 + 手动）
//   const allGroups = [
//     ...new Set(fixedList.flatMap(c => c.groups)),
//     ...manualGroups.map(g => g.name)
//   ];
//   if (allGroups.includes(name)) {
//     return { code: 409, message: '分组已存在' };
//   }

//   // 2. 生成手动分组ID（尾插法连续递增）
//   const newId = manualGroups.length > 0 
//     ? manualGroups[manualGroups.length - 1].id + 1 
//     : dynamicGroups.length + 1;

//   // 3. 存储到手动分组列表
//   manualGroups.push({
//     id: newId,
//     name,
//     count: 0
//   });

//   return { 
//     code: 200, 
//     data: { id: newId, name, count: 0 },
//     message: '新建成功' 
//   };
// });

// // 模拟删除分组接口
// Mock.mock(/\/group\/delete\/.+/, 'delete', (options) => {
//   const groupName = decodeURIComponent(options.url.split('/').pop());

//   // 1. 清除联系人标签
//   fixedList.forEach(contact => {
//     contact.groups = contact.groups.filter(g => g !== groupName);
//   });

//   // 2. 删除手动分组
//   manualGroups = manualGroups.filter(g => g.name !== groupName);

//   // 3. 更新动态分组统计
//   const dynamicCount = fixedList.reduce((acc, contact) => {
//     contact.groups.forEach(g => acc[g] = (acc[g] || 0) + 1);
//     return acc;
//   }, {});

//   return {
//     code: 200,
//     message: `分组【${groupName}】已删除`,
//     data: {
//       deletedGroup: groupName,
//       affected: dynamicCount[groupName] || 0
//     }
//   };
// });

// // 批量添加联系人到分组接口
// Mock.mock('/contacts/batch-groups', 'post', (options) => {

//   const { ids, group } = JSON.parse(options.body)

  
//   // 0. 有效性校验参数
//   if (!group || !ids?.length) {
//     return Mock.mock({ 
//       code: 400,
//       message: '请求参数不合法'
//     })
//   }

//   // 1. 更新联系人分组信息
//   let successCount = 0
//   fixedList = fixedList.map(contact => {
//     if (ids.includes(contact.id) && !contact.groups.includes(group)) {
//       successCount++
//       return {
//         ...contact,
//         groups: [...contact.groups, group]
//       }
//     }G
//     return contact
//   })

//   // 2. 更新分组计数
//   const targetGroup = manualGroups.find(g => g.name === group)
//   if (targetGroup) {
//     targetGroup.count += successCount // 手动分组直接更新
//   } 

//   // 3. 返回响应
//   return Mock.mock({
//     code: successCount > 0 ? 200 : 400,
//     data: {
//       successCount,
//       failedIds: ids.filter(id => 
//         !fixedList.find(c => c.id === id)?.groups.includes(group)
//       )
//     },
//     message: successCount > 0
//      ? `成功为${successCount}个联系人添加到分组【${group}】`
//       : `没有找到联系人或联系人已存在分组`
//   })
// })

// // 导入
// Mock.mock(/\/contacts\/import/, 'post', (options) => {
//   try {

//     const { filename, data: fileContent } = JSON.parse(options.body)
//     console.log('[Import] 文件名:', filename)
//     console.log('[Import] 原始内容:', fileContent)

//     // 直接使用文本内容解析
//     let parsedData = []
//     if (filename.endsWith('.csv')) {
//       // CSV处理（确保UTF-8编码）
//       parsedData = parseCSV(fileContent)
//       console.log('[CSV解析结果]', parsedData)
      
//     } else if (filename.endsWith('.vcf')) { 
//       // vCard处理（支持带BOM头的文件）
//       const vcfContent = fileContent.replace(/^\uFEFF/, '') // 移除可能的BOM
//       parsedData = parseVCF(vcfContent)
//       console.log('[vCard解析结果]', parsedData)
//     }

//     // 数据校验
//     const validContacts = parsedData.filter(c => 
//       /^1[3-9]\d{9}$/.test(c.cellphone)
//     )
//     let newContacts = []
//     //引入中的去重
//     const importPhoneSet = new Set()
//     for(let item of validContacts){
//       importPhoneSet.has(item.cellphone)||newContacts.push(item)
//       importPhoneSet.add(item.cellphone)
//     }
    
//     // 原本的重复
//     const existingPhones = new Set(fixedList.map(c => c.cellphone))

//     newContacts = newContacts.filter(c => 
//       !existingPhones.has(c.cellphone)
//     )
    
    
//     // 生成新联系人（添加UTF-8字符兼容处理）
//     const lastId = fixedList.length ? Math.max(...fixedList.map(c => c.id)) : 0
//     const processed = newContacts.map((c, i) => ({
//       ...c,
//       id: lastId + i + 1,
//       name: c.name.normalize(), // 标准化Unicode字符
//       gender: c.gender || '未知',
//       birthday: c.birthday?.replace(/\t/g, '') || '',
//       groups: c.groups || [],
//       email: c.email || '',
//       address: c.address || '',
//       _pinyin_full: pinyin(c.name, { style: pinyin.STYLE_NORMAL }).join(' '),
//       _pinyin_init: pinyin(c.name, { style: pinyin.STYLE_FIRST_LETTER }).join('')
//     }))

//     // 更新数据（添加分组字符编码处理）
//     fixedList.push(...processed)
  
//     return {
//       code: 200,
//       data: {
//         successCount: processed.length,
//         duplicateCount: validContacts.length - processed.length,
//         invalidCount: parsedData.length - validContacts.length
//       }
//     }
//   } catch (error) {
//     console.error('[Import Error]', error)
//     return { 
//       code: 500, 
//       message: error.message.includes('Malformed') 
//         ? '文件编码错误，请使用UTF-8格式' 
//         : error.message 
//     }
//   }
// })


// // CSV 解析器（增强兼容性）
// function parseCSV(content) {
//   const results = Papa.parse(content, {
//     header: true,
//     skipEmptyLines: true
//   })
//   console.log('[PapaParse Results]', results.data);
  
//   return results.data
//   .map(row => ({  
//     name: row.姓名,
//     cellphone: row.手机号?.replace(/\D/g, ''),
//     gender: row.性别 || '未知',  // 默认值
//     birthday: (row.生日 || '')
//       .replace(/[\t\s]/g, '') // 移除制表符和空格
//       .slice(0, 10),           // 保留YYYY-MM-DD部分
//     email: row.邮箱|| '',
//     address: row.地址|| '',
//     // 分组处理（适配中文逗号）
//     groups: (row.所属分组|| '')
//       .split(/[,，;]/)
//       .map(g => g.trim())
//   }))
//   .filter(c => c.name && c.cellphone)
// }

// // vCard 解析器（容错处理）
// function parseVCF(content) {
//   return content.split('BEGIN:VCARD')
//     .slice(1)
//     .map(card => {
//       const lines = card.split('\n')
//       const contact = { groups: [] }
      
//       lines.forEach(line => {
//         console.log(line.split(':'));  
//         const [key, value] = line.split(':')
      
//         if (key?.startsWith('FN')) contact.name = value
//         if (key?.startsWith('GENDER')) contact.gender = value
//         if (key?.startsWith('TEL')) contact.cellphone = value.replace(/\D/g, '')
//         if (key?.startsWith('EMAIL')) contact.email = value
//         if (key?.startsWith('ADR')) contact.address = value.replace(/;/g, ' ')
//         if (key?.startsWith('BDAY')) contact.birthday = value.replace(/[\t\s]/g, '').slice(0, 10)
//         if (key?.startsWith('CATEGORIES')) contact.groups = value.split(/[,;]/).map(g => g.trim())
//       })
      
//       return contact
//     })
//     .filter(c => c.name && c.cellphone)
// }


